/**************************************************************

	Script		: multiBox
	Version		: 2.0.2
	Authors		: Samuel Birch
	Desc		: Supports jpg, gif, png, flash, flv, mov, wmv, mp3, html, iframe
	Licence		: Open Source MIT Licence
	Modified	: Liam Smart (liam_smart@hotmail.com) - MooTools 1.2 upgrade
	Usage		: window.addEvent('domready', function(){
	//call multiBox
					  var initMultiBox = new multiBox({
						  mbClass: '.mb',//class you need to add links that you want to trigger multiBox with (remember and update CSS files)
						  container: $(document.body),//where to inject multiBox
						  descClassName: 'multiBoxDesc',//the class name of the description divs
						  path: './Files/',//path to mp3 and flv players
						  useOverlay: true,//use a semi-transparent background. default: false;
						  maxSize: {w:600, h:400},//max dimensions (width,height) - set to null to disable resizing
						  addDownload: true,//do you want the files to be downloadable?
						  pathToDownloadScript: './Scripts/ForceDownload.asp',//if above is true, specify path to download script (classicASP and ASP.NET versions included)
						  addRollover: true,//add rollover fade to each multibox link
						  addOverlayIcon: true,//adds overlay icons to images within multibox links
						  addChain: true,//cycle through all images fading them out then in
						  recalcTop: true,//subtract the height of controls panel from top position
						  addTips: true//adds MooTools built in 'Tips' class to each element (see: http://mootools.net/docs/Plugins/Tips)
					  });
				  });

**************************************************************/

//start multiBox class
var multiBox = new Class({
	
	//implements
	Implements: Options,
	
	//options
	options:{
	    initialSize: {w:250, h:250},//initial width/height the box will open at before resizing
	    useOverlay: false,//do you want to use a semi-transparent background?
	    contentColor: '#fff',//background colour of the content holder within the pop-up
	    showNumbers: true,//show numbers such as "4 of 12"
	    showControls: true,//show the previous/next, title, download etc
	    descClassName: false,//class of description box
	    movieSize: {w:400, h:300},//default width/height of movie
	    offset: {x:0, y:0},//offset multiBox position
	    fixedTop: false,//force multiBox to open at top of page
	    path: './Files/',//path to mp3player and flvplayer etc
	    openFromLink: true,//pop-up will slide in from the position of the element clicked
	    useKeyboard: true//allow keyboard shortcuts (esc: close, spacebar & right arrow: next, left arrow: previous)
	},

	//initialization
	initialize: function(options){
	    //set options
	    this.setOptions(options);
	    //set variables
	    this.openClosePos = {};
	    this.contentToLoad = {};
	    this.contentObj = {};
	    this.containerDefaults = {};
	    this.multiBox = [];
	    this.families = [];
	    this.content = [];
	    this.timer = 0;
	    this.index = 0;
	    this.opened = false;
	    this.currentGallery = null;
	    //start multiBox
	    if($$(this.options.mbClass).length > 0){this.start();};
	},
	
	//start multiBox
	start: function(){
	    //there will be no next/previous buttons unless you specify them to a group
	    $$(this.options.mbClass).each(function(el){
		    //we must store original rel & title values to use later
		    if($chk(el.get('rel'))){
			el.store('origRel',el.get('rel'));
		    };
		    if($chk(el.get('title'))){
			el.store('origTitle',el.get('title'));
		    };
		    //check if it has a rel="[group]"
		    if(el.rel.test(/\[*?]/i)){
		    //if there are more than 1 rel value, we need to split them to find our group
		    if(el.get('rel').contains(',')){
			//split then loop through each array instance of the split rel's
			var tempArr = el.get('rel').split(',');
			tempArr.each(function(temp,i){
				if(temp.contains('[')){//only take out the rel relating to a [group]
				    //change this links relation to the temp variable
				    el.set('rel',temp);
				};
			    },this);
		    };
		    //if rel isnt already in fanilies then create a new instance for it
		    this.families.include(el.get('rel'));
		};
		//finally now we have put them into families, push each link with 'mbClass' into multiBox array
		this.multiBox.push(el);
		},this);
	//loop through each mb link seperating content into groups of families
	this.multiBox.each(function(el){
		//check rel contains a group
		if(el.rel.test(/\[*?]/i)){
		//we know the link has a group so loop through each family to find where it belongs
		this.families.each(function(fam,i){
			//if the rel belongs to a family we make sure its pushed into correct family array within content array
			if(el.get('rel') == fam){
			    //if there isnt a family array within content array to hold this family create one
			    if(!this.content[i]){
				//create new gallery
				this.content[i] = [];
			    };
			    //finally push link into appropriate family within content array
			    this.content[i].push(el);
			};
		    },this);
	    };
	    },this);
    //loop through each mb link seperating content into groups of families
    this.multiBox.each(function(el){
	    //check rel DOESNT contain a group
	    if(el.rel.test(/\[*?]/i) == false){
	    //add link into content array as a single array as it doesnt belong to a family
	    this.content.push([el]);
	};
	},this);
		
this.container = new Element('div').addClass('MultiBoxContainer').inject(this.options.container,'inside');
this.iframe = new Element('iframe', {
	'id': 'multiBoxIframe',
	'name': 'mulitBoxIframe',
	'src': 'javascript:void(0);',
	'frameborder': 0,
	'scrolling': 'no',
	'styles': {
	    position: 'absolute',
	    top: 0,
	    left: 0,
	    width: '100%',
	    height: '100%',
	    filter: 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)',
	    opacity: 0
	}
    }).inject(this.container,'inside');

this.box = new Element('div').addClass('MultiBoxContent').inject(this.container,'inside');
this.closeButton = new Element('div').addClass('MultiBoxClose').inject(this.container,'inside').addEvent('click', this.close.bind(this));
this.controlsContainer = new Element('div').addClass('MultiBoxControlsContainer').inject(this.container,'inside');
this.controls = new Element('div').addClass('MultiBoxControls').inject(this.controlsContainer,'inside');
this.previousButton = new Element('div').addClass('MultiBoxPrevious').inject(this.controls,'inside').addEvent('click', this.previous.bind(this));
this.nextButton = new Element('div').addClass('MultiBoxNext').inject(this.controls,'inside').addEvent('click', this.next.bind(this));
this.title = new Element('div').addClass('MultiBoxTitle').inject(this.controls,'inside');
this.number = new Element('div').addClass('MultiBoxNumber').inject(this.controls,'inside');
this.description = new Element('div').addClass('MultiBoxDescription').inject(this.controls,'inside');
		
//check user options and call functions accordingly
if(this.options.useKeyboard){
    $(window.document).addEvent('keydown',function(e){
	    if(e.key == 'right' || e.key == 'space'){
		this.next();
	    }else if(e.key == 'left'){
		this.previous();
	    }else if(e.key == 'esc'){
		this.close();
	    };
	}.bind(this));
};
if(this.options.useOverlay){
    this.overlay = new Overlay({
	    container:this.options.container,
	    onClick:this.close.bind(this)
	});
};
if(this.options.addOverlayIcon == true){
    this.addOverlayIcon(this.multiBox);
};
if(this.options.addRollover == true){
    this.addRollover(this.multiBox);
};
if(this.options.addChain == true){
    this.addChain(this.multiBox);
};
if(this.options.descClassName){
    this.descriptions = $$('.'+this.options.descClassName);
};
if(this.options.addDownload == true){
    this.addDownload(this.multiBox);
};
if(this.options.addTips == true){
    this.addTips(this.multiBox);
};

//if there is only one multiBox link don't show unneccesary buttons
if(this.multiBox.length == 1){
    this.title.setStyle('margin-left',0);
    this.description.setStyle('margin-left',0);
    this.previousButton.setStyle('display','none');
    this.nextButton.setStyle('display','none');
    this.number.setStyle('display','none');
};
		
new Element('div').setStyle('clear','both').inject(this.controls,'inside');
		
//start breaking into content array to add event listeners to each link within each group
this.content.each(function(el,i){
	//now we are left with each group as arrays
	el.each(function(group,i){
		//add event listener
		group.addEvent('click', function(e){
			var myTarget = ($(e.target).match('a')) ? $(e.target) : $(e.target).getParent('a');
			e.preventDefault();
			this.open(el.indexOf(myTarget),el);
		    }.bind(this));
		//check to see if link is an HTML element
		if(group.href.indexOf('#') > -1){
		    //grab it as an object
		    group.content = $(group.href.substr(group.href.indexOf('#')+1));
		    //hide the object
		    if(group.content){
			group.content.setStyle('display','none');
		    };
		};
	    },this);
    },this);
		
this.containerEffects = new Fx.Morph(this.container,{duration:400});
this.controlEffects = new Fx.Morph(this.controlsContainer,{duration:300});
this.reset();
},
	
	setContentType: function(element){
	    var str = element.href.substr(element.href.lastIndexOf('.')+1).toLowerCase();
	    var myRel = element.retrieve('origRel');
	    var contentOptions = {};
	    //retrieve original rel values and make sure there was one
	    if($chk(myRel)){
		//split the options just incase there are more than 1
		var optArr = myRel.split(',');
		optArr.each(function(el){
			//make sure the group is ignored
			if(el.test(/\[*?]/i) != true){
			var ta = el.split(':');
			contentOptions[ta[0]] = ta[1];
		    };
		    });
	};
		
if(contentOptions.type != undefined){
    str = contentOptions.type;
};
		
this.contentObj = {};
this.contentObj.url = element.href;
this.contentObj.xH = 0;
		
if(contentOptions.width){
    this.contentObj.width = contentOptions.width;
}else{
    this.contentObj.width = this.options.movieSize.w;
};
if(contentOptions.height){
    this.contentObj.height = contentOptions.height;
}else{
    this.contentObj.height = this.options.movieSize.h;
};
if(contentOptions.panel){
    this.panelPosition = contentOptions.panel;
}else{
    this.panelPosition = this.options.panel;
};
		
switch(str){
case 'jpg':
case 'gif':
case 'png':
    this.type = 'image';
break;
case 'swf':
    this.type = 'flash';
    break;
case 'flv':
    this.type = 'flashVideo';
    this.contentObj.xH = 70;
    break;
case 'mov':
    this.type = 'quicktime';
    break;
case 'wmv':
    this.type = 'windowsMedia';
    break;
case 'rv':
case 'rm':
case 'rmvb':
    this.type = 'real';
break;
case 'mp3':
    this.type = 'flashMp3';
    this.contentObj.width = 320;
    this.contentObj.height = 70;
    break;
case 'element':
    this.type = 'htmlelement';
    this.elementContent = element.content;
    this.elementContent.setStyles({
	    display: 'block',
		opacity: 0,
		width: 'auto'//added this to get htmlElement to behave
		});
				
    //check and see if styles are being applied to HTML content section
    if(this.elementContent.getStyle('width') != 'auto'){
	this.contentObj.width = this.elementContent.getWidth();
    };
				
    this.contentObj.height = this.elementContent.getHeight();
    this.elementContent.setStyles({
	    display: 'none',
		opacity: 1
		});
    break;
default:
    this.type = 'iframe';
    if(contentOptions.req){
	this.type = 'req';
    };
    break;
}
},
	
	reset: function(){
	    this.container.setStyles({
		    opacity: 0,
			display: 'none'
			});
	    this.controlsContainer.setStyle('height',0);
	    this.removeContent();
	    this.previousButton.removeClass('MultiBoxButtonDisabled');
	    this.nextButton.removeClass('MultiBoxButtonDisabled');
	    this.opened = false;
	},
	
	    getOpenClosePos: function(element){
		if(this.options.openFromLink){
		    if(element.getFirst()){
			var w = element.getFirst().getCoordinates().width - (this.container.getStyle('border').toInt() * 2);
			if(w < 0){
			    w = 0;
			};
			var h = element.getFirst().getCoordinates().height - (this.container.getStyle('border').toInt() * 2);
			if(h < 0){
			    h = 0;
			};
			this.openClosePos = {
			    width: w,
			    height: h,
			    top: element.getFirst().getCoordinates().top,
			    left: element.getFirst().getCoordinates().left
			};
		    }else{
			var w = element.getCoordinates().width - (this.container.getStyle('border').toInt() * 2);
			if(w < 0){
			    w = 0;
			};
			var h = element.getCoordinates().height - (this.container.getStyle('border').toInt() * 2);
			if(h < 0){
			    h = 0;
			};
			this.openClosePos = {
			    width: w,
			    height: h,
			    top: element.getCoordinates().top,
			    left: element.getCoordinates().left
			};
		    };
		}else{
		    if(this.options.fixedTop){
			var top = this.options.fixedTop;
		    }else{
			var top = ((window.getHeight()/2)-(this.options.initialSize.h/2)-this.container.getStyle('border').toInt())+this.options.offset.y;
		    };
		    this.openClosePos = {
			width: this.options.initialSize.w,
			height: this.options.initialSize.h,
			top: top,
			left: ((window.getWidth()/2)-(this.options.initialSize.w/2)-this.container.getStyle('border').toInt())+this.options.offset.x
		    };
		};
		return this.openClosePos;
	},
	
	    open: function(index,currGal){
		//need to store current gallery and index of the object in gallery
		this.currentGallery = currGal;
		this.index = index;
		//grab id so description can be matched
		this.openId = this.currentGallery[this.index].getProperty('id');
		//check to see if mb is already open
		if(!this.opened){
		    this.opened = true;
			
		    if(this.options.useOverlay){
			this.overlay.show();
		    };
			
		    this.container.setStyles(this.getOpenClosePos(this.currentGallery[this.index]));
		    this.container.setStyles({
			    opacity: 0,
				display: 'block'
				});
			
		    if(this.options.fixedTop){
			var top = this.options.fixedTop;
		    }else{
			var top = ((window.getHeight()/2)-(this.options.initialSize.h/2)-this.container.getStyle('border').toInt())+this.options.offset.y;
		    };
			
		    this.containerEffects.start({
			    width: this.options.initialSize.w,
				height: this.options.initialSize.h,
				top: top,
				left: ((window.getWidth()/2)-(this.options.initialSize.w/2)-this.container.getStyle('border').toInt())+this.options.offset.x,
				opacity: [0, 1]
				});
			
		    this.load(this.currentGallery[this.index]);
		}else{
		    if(this.options.showControls){
			this.hideControls();
		    };
		    this.getOpenClosePos(this.currentGallery[this.index]);
		    this.timer = this.hideContent.bind(this).delay(500);
		    this.timer = this.load.pass(this.currentGallery[this.index],this).delay(1100);
		};
	},
	
	    getContent: function(element){
		this.setContentType(element);
		var desc = {};
		if(this.options.descClassName){
		    this.descriptions.each(function(el,i){
			    if(el.hasClass(this.openId)){
				desc = el.clone();
			    };
			},this);
		};
		this.contentToLoad = {
		    title: element.retrieve('origTitle') || '&nbsp;',
		    desc: desc,
		    number: this.index+1
		};
	},
	
	    close: function(){
		if(this.options.useOverlay){
		    this.overlay.hide();
		};
		if(this.options.showControls){
		    this.hideControls();
		};
		this.hideContent();
		this.containerEffects.cancel();
		this.zoomOut.bind(this).delay(500);
	},
	
	    zoomOut: function(){
		this.containerEffects.start({
			width: this.openClosePos.width,
			    height: this.openClosePos.height,
			    top: this.openClosePos.top,
			    left: this.openClosePos.left,
			    opacity: 0
			    });
		this.reset.bind(this).delay(500);
	},
	
	    load: function(element){
		this.box.addClass('MultiBoxLoading');
		this.getContent(element);
		if(this.type == 'image'){
		    var xH = this.contentObj.xH;
		    this.contentObj = new Asset.image(element.href,{onload:this.resize.bind(this)});
		    this.contentObj.xH = xH;
		}else{
		    this.resize();
		};
	},
	
	    resize: function(){
		//only resize if values have been set to resize to
		if(this.options.maxSize != null){
		    var maxW = this.options.maxSize.w.toInt();//declare max width at top of script
		    var maxH = this.options.maxSize.h.toInt();//declare max height at top of script
		    var dW = 0;//set initial final width to 0
		    var dH = 0;//set initial final height to 0
		    var h = dH = this.contentObj.height;//retrieve image height
		    var w = dW = this.contentObj.width;//retrieve image width
			
		    if((h >= maxH) && (w >= maxW)){
			if(h > w){
			    dH = maxH;
			    dW = ((w * dH) / h).toInt();
			}else{
			    dW = maxW;
			    dH = ((h * dW) / w).toInt();
			};
		    }else if((h > maxH) && (w < maxW)){
			dH = maxH;
			dW = ((w * dH) / h).toInt();
		    }else if((h < maxH) && (w > maxW)){
			dW = maxW;
			dH = ((h * dW) / w).toInt();
		    };
			
		    this.contentObj.height = dH;//resize image height
		    this.contentObj.width = dW;//resize image width
		};
		
		if(this.options.fixedTop){
		    var top = this.options.fixedTop;
		}else{
		    var top = ((window.getHeight() / 2) - ((Number(this.contentObj.height) + this.contentObj.xH) / 2) - this.container.getStyle('border').toInt() + window.getScrollTop()) + this.options.offset.y;
		};
		var left = ((window.getWidth() / 2) - (this.contentObj.width / 2) - this.container.getStyle('border').toInt()) + this.options.offset.x;
		if(top < 0){
		    top = 0;
		};
		if(left < 0){
		    left = 0;
		};
		
		this.containerEffects.cancel();
		this.containerEffects.start({
			width: this.contentObj.width,
			    height: Number(this.contentObj.height) + this.contentObj.xH,
			    top: top,
			    left: left,
			    opacity: 1
			    });
		this.timer = this.showContent.bind(this).delay(500);
	},
	
	    showContent: function(){
		this.box.removeClass('MultiBoxLoading');
		this.removeContent();
		this.contentContainer = new Element('div', {
			'id': 'MultiBoxContentContainer',
			'styles': {
			    opacity: 0,
			    width: this.contentObj.width,
			    height: (Number(this.contentObj.height)+this.contentObj.xH)
			}
		    }).inject(this.box,'inside');

		if(this.type == 'image'){
		    this.contentObj.inject(this.contentContainer,'inside');
		}else if(this.type == 'iframe'){
		    new Element('iframe', {
			    'id': 'iFrame'+new Date().getTime(),
				'width': this.contentObj.width,
				'height': this.contentObj.height,
				'src': this.contentObj.url,
				'frameborder': 0,
				'scrolling': 'auto'
				}).inject(this.contentContainer,'inside');
		}else if(this.type == 'htmlelement'){
		    this.elementContent.clone().setStyle('display','block').inject(this.contentContainer,'inside');
		}else if(this.type == 'req'){
		    var req = new Request.HTML({
			    url: this.contentObj.url,
			    method: 'get',
			    evalScripts: true,
			    onSuccess: function(responseTree,responseElements,responseHTML,responseJavaScript){
				$('MultiBoxContentContainer').adopt(responseElements);
			    }
			}).get();
		}else{
		    this.obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'}).inject(this.contentContainer,'inside');
		    this.createEmbedObject();
		    //if its a movie inject the object string into obj
		    if(this.str){
			this.obj.set('html',this.str);
			this.str = null;//clear the value after using it
		    };
		};
		
		this.contentEffects = new Fx.Morph(this.contentContainer,{duration:500});
		this.contentEffects.start({
			opacity: 1
			    });
		
		this.title.set('html',this.contentToLoad.title);
		this.number.set('html',this.contentToLoad.number+' of '+this.currentGallery.length);
		if(this.options.descClassName){
		    //check to see if there is a desc override
		    if(this.currentGallery[this.index].retrieve('origRel')){
			//declare variables
			var ignoreDesc = false;
			var myRel = this.currentGallery[this.index].retrieve('origRel');
			var optArr = myRel.split(',');
			//loop through each split looking for 'noDesc'
			optArr.each(function(el){
				if(el.test('noDesc') == true){
				    ignoreDesc = true;
				};
			    });
		    };
		    //check and see if user wants to override default description setting for this element
		    if(ignoreDesc != true){
			if(this.description.getFirst()){
			    this.description.getFirst().destroy();
			};
			this.contentToLoad.desc.inject(this.description,'inside').setStyle('display','block');
		    };
		};

		if(this.options.showControls){
		    this.timer = this.showControls.bind(this).delay(800);
		};
		
		if(this.options.addDownload){
		    var filePath = this.currentGallery[this.index].href;
		    var fileName = this.currentGallery[this.index].href.substring(this.currentGallery[this.index].href.lastIndexOf('/')+1);
		    this.download.set('html','<a href="'+this.options.pathToDownloadScript+'?FilePath='+filePath+'" title="Download File '+fileName+'">Download File</a>');
		};
	},
	
	    hideContent: function(){
		this.box.addClass('MultiBoxLoading');
		this.contentEffects.start({
			opacity: 0
			    });
		this.removeContent.bind(this).delay(500);
	},
	
	    removeContent: function(){
		if($('MultiBoxMediaObject')){
		    $('MultiBoxMediaObject').empty();//so sound doesnt keep playing in IE
		    $('MultiBoxMediaObject').dispose();//dispose() instead of destroy() as IE 6&7 crashes
		};
		if($('MultiBoxContentContainer')){
		    $('MultiBoxContentContainer').dispose();//dispose() instead of destroy() as IE 6&7 crashes
		};
		if(this.description){
		    this.description.empty();//empty description incase next element doesnt want to have one
		};
	},
	
	    showControls: function(){
		if(this.container.getStyle('height') != 'auto'){
		    this.containerDefaults.height = this.container.getStyle('height');
		    this.containerDefaults.backgroundColor = this.options.contentColor;
		    //controls box isnt taken into consideration when positioning the container from the top so correct this
		    if(this.options.recalcTop == true){
			if(this.container.getStyle('top').toInt() > this.controls.getStyle('height').toInt()/2){
			    this.finalResize = new Fx.Morph(this.container,{duration:400});
			    this.finalResize.start({
				    top: this.container.getStyle('top').toInt()-(this.controls.getStyle('height').toInt()/2)
					});
			};
		    };
		};
		
		this.container.setStyle('height','auto');

		if(this.contentToLoad.number == 1){
		    this.previousButton.addClass('MultiBoxPreviousDisabled');
		}else{
		    this.previousButton.removeClass('MultiBoxPreviousDisabled');
		};
		if(this.contentToLoad.number == this.currentGallery.length){
		    this.nextButton.addClass('MultiBoxNextDisabled');
		}else{
		    this.nextButton.removeClass('MultiBoxNextDisabled');
		};
		
		this.controlEffects.start({
			'height': this.controls.getStyle('height')
			    });
	},
	
	    hideControls: function(num){
		this.controlEffects.start({'height': 0}).chain(function(){
			this.container.setStyles(this.containerDefaults);
		    }.bind(this));
	},
	
	    next: function(){
		if(this.index < this.currentGallery.length-1){
		    this.index++;
		    this.openId = this.currentGallery[this.index].getProperty('id');
		    if(this.options.showControls){
			this.hideControls();
		    };
		    this.getOpenClosePos(this.currentGallery[this.index]);
		    this.timer = this.hideContent.bind(this).delay(500);
		    this.timer = this.load.pass(this.currentGallery[this.index],this).delay(1100);
		};
	},
	
	    previous: function(){
		if(this.index > 0){
		    this.index--;
		    this.openId = this.currentGallery[this.index].getProperty('id');
		    if(this.options.showControls){
			this.hideControls();
		    };
		    this.getOpenClosePos(this.currentGallery[this.index]);
		    this.timer = this.hideContent.bind(this).delay(500);
		    this.timer = this.load.pass(this.currentGallery[this.index],this).delay(1000);
		};
	},
	
	    createEmbedObject: function(){
		if(this.type == 'flash'){
		    var url = this.contentObj.url;
		    var swfHolder = new Element('div').setProperties({id: 'swfHolder'}).inject(this.obj,'inside');
		    var flashObj = new Swiff(url, {
			    id: url,
			    container: swfHolder,
			    width: this.contentObj.width,
			    height: this.contentObj.height
			});
		}else if(this.type == 'flashVideo'){
		    var url = this.contentObj.url;
		    var swfHolder = new Element('div').setProperties({id: 'swfHolder'}).inject(this.obj,'inside');
		    var flashObj = new Swiff(this.options.path+'flvplayer.swf', {
			    id: url,
			    container: swfHolder,
			    width: this.contentObj.width,
			    height: (Number(this.contentObj.height)+this.contentObj.xH),
			    vars: {
				path: url
			    }
			});
		}else if(this.type == 'flashMp3'){
		    var url = this.contentObj.url;
		    var swfHolder = new Element('div').setProperties({id: 'swfHolder'}).inject(this.obj,'inside');
		    var flashObj = new Swiff(this.options.path+'mp3player.swf', {
			    id: url,
			    container: swfHolder,
			    width: this.contentObj.width,
			    height: (Number(this.contentObj.height)+this.contentObj.xH),
			    vars: {
				path: url
			    }
			});
		}else if(this.type == 'quicktime'){
		    var url = this.contentObj.url;
		    this.str = '<object  type="video/quicktime" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"';
		    this.str += ' width="'+this.contentObj.width+'" height="'+this.contentObj.height+'">';
		    this.str += '<param name="src" value="'+url+'" />';
		    this.str += '<param name="autoplay" value="true" />';
		    this.str += '<param name="controller" value="true" />';
		    this.str += '<param name="enablejavascript" value="true" />';
		    this.str += '<embed src="'+url+'" autoplay="true" pluginspage="http://www.apple.com/quicktime/download/" width="'+this.contentObj.width+'" height="'+this.contentObj.height+'"></embed>';
		    this.str += '</object>';
		}else if(this.type == 'windowsMedia'){
		    var url = this.contentObj.url;
		    this.str = '<object  type="application/x-oleobject" classid="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112"';
		    this.str += ' width="'+this.contentObj.width+'" height="'+this.contentObj.height+'">';
		    this.str += '<param name="filename" value="'+url+'" />';
		    this.str += '<param name="Showcontrols" value="true" />';
		    this.str += '<param name="autoStart" value="true" />';
		    this.str += '<embed type="application/x-mplayer2" src="'+url+'" Showcontrols="true" autoStart="true" width="'+this.contentObj.width+'" height="'+this.contentObj.height+'"></embed>';
		    this.str += '</object>';
		}else if(this.type == 'real'){
		    var url = this.contentObj.url;
		    this.str = '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"';
		    this.str += ' width="'+this.contentObj.width+'" height="'+this.contentObj.height+'">';
		    this.str += '<param name="src" value="'+url+'" />';
		    this.str += '<param name="controls" value="ImageWindow" />';
		    this.str += '<param name="autostart" value="true" />';
		    this.str += '<embed src="'+url+'" controls="ImageWindow" autostart="true" width="'+this.contentObj.width+'" height="'+this.contentObj.height+'"></embed>';
		    this.str += '</object>';
		};
	},
	
	    addOverlayIcon:function(element){
		//loop through each instance
		element.each(function(el,i){
			//if link contains an image ad overlay
			if(el.getElement('img')){
			    //add position:relative to them so that icon is contained
			    el.setStyle('position','relative');
			    //inject a new div that is the overlay icon
			    var overlayIcon = new Element('div').inject(el,'inside');
			    overlayIcon.addClass('OverlayIcon');
			    //IE6 causes too many issues due to lack of PNG support
			    if(!Browser.Engine.trident4){
				overlayIcon.setStyle('opacity',0);
				overlayIcon.set('tween',{duration:3000,transition:Fx.Transitions.Expo.easeIn}).tween('opacity',1);
			    };
			};
		    });
	},
	
	    addRollover:function(element){
		element.each(function(el,i){
			//if link contains an image ad overlay
			if(el.getElement('img')){
			    //add event listeners
			    el.addEvents({
				    'mouseenter': function(){
					el.getElement('img').set('tween',{duration:200,transition:Fx.Transitions.linear}).tween('opacity',0.5);
				    },
					'mouseleave': function(){
					    el.getElement('img').set('tween',{duration:400,transition:Fx.Transitions.linear}).tween('opacity',1);
					}
				});
			};
		    });
	},
	
	    addChain:function(element){
		//create new array to hold all links with images to chain through
		var chainArray = [];
		//push link into chainArray if it contains an image
		element.each(function(el,i){
			//detect whether link contains image
			if(el.getElement('img')){
			    chainArray.push(el);
			};
		    });
		//now chain through each item in the new array
		chainArray.each(function(el,i){
			//detect whether link contains image
			if(el.getElement('img')){
			    //chain through each multibox link that contains an image
			    var HoverMe = new Chain();
			    var hoverOn = function(){
				el.getElement('img').set('tween',{duration:200,transition:Fx.Transitions.linear}).tween('opacity',0.5);
			    };
			    var hoverOff = function(){
				el.getElement('img').set('tween',{duration:400,transition:Fx.Transitions.linear}).tween('opacity',1);
			    };
			    HoverMe.chain(hoverOn);
			    HoverMe.chain(hoverOff);
			    HoverMe.callChain.delay(2000+(i+1)*1000,HoverMe);
			    HoverMe.callChain.delay((i+2)*1000,HoverMe);
			};
		    });
	},
	
	    addDownload:function(element){
		this.download = new Element('div').addClass('MultiBoxDownload').inject(this.controls,'inside').setStyle('margin-left',0);
	},
	
	    addTips:function(element){
		element.each(function(el,i){
			//add MooTools tips
			if(el.get('title')){
			    var toolTips = new Tips(el, {
				    onShow: function(el){el.fade(.9);},
				    onHide: function(el){el.fade(0);},
				    offsets: {'x':16,'y':5},
				    className: 'mbTips'
				});
			};
			//remove title so dont get duplication of title and MooTools tips
			if(el.getElement('img')){
			    if(el.getElement('img').get('title')){
				el.getElement('img').erase('title');
			    };
			    if(el.getElement('img').get('alt')){
				el.getElement('img').erase('alt');
			    };
			};
		    });
	}
});